package org.dubbo.consumer;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.alibaba.dubbo.config.ApplicationConfig;
import com.alibaba.dubbo.config.ReferenceConfig;
import com.alibaba.dubbo.config.RegistryConfig;
import com.alibaba.dubbo.registry.integration.RegistryProtocol;
import com.alibaba.dubbo.rpc.Protocol;

import lif.dubbo.EchoService;

/**
 * Hello world!
 *
 */
public class Api {

	@SuppressWarnings("rawtypes")
	public static void start() throws Exception {
	  
		@SuppressWarnings("unused")
		ReferenceConfig r = new ReferenceConfig();

		// 当前应用配置
		ApplicationConfig application = new ApplicationConfig();
		application.setName("api-invoke");
		// 连接注册中心配置
		RegistryConfig registry = new RegistryConfig();
		registry.setAddress("192.168.12.75:2181");
		// registry.setUsername("aaa");
		// registry.setPassword("bbb");
		// registry.setPort(20880);
		registry.setProtocol("zookeeper");
		// Protocol protocol = RegistryProtocol.getRegistryProtocol();
		// 注意：ReferenceConfig为重对象，内部封装了与注册中心的连接，以及与服务提供方的连接
		registry.setTimeout(5000);
		// 引用远程服务
		ReferenceConfig<EchoService> reference = new ReferenceConfig<EchoService>(); // 此实例很重，封装了与注册中心的连接以及与提供者的连接，请自行缓存，否则可能造成内存和连接泄漏
		reference.setApplication(application);

		reference.setRegistry(registry); // 多个注册中心可以用setRegistries()
		// reference.setProtocol("");
		reference.setInterface(EchoService.class);
		// reference.setVersion("1.0.0");

		// 和本地bean一样使用xxxService
		EchoService demoService = reference.get(); // 注意：此代理对象内部封装了所有通讯细节，对象较重，请缓存复用
		String hello = demoService.echo("world"); // 执行远程方法

		System.out.println("consumer " + hello); // 显示调用结果

	}

	public static void main(String[] args) throws Exception {
		start();
	}

}
